home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 002 / emacsdoc.arc / README < prev   
Encoding:
Text File  |  1987-02-16  |  21.8 KB  |  616 lines

  1.         MicroEMACS 3.8f Release Notes
  2.  
  3. **********************************************************************
  4.  
  5.     (C)opyright 1987 by Daniel M. Lawrence
  6.     MicroEMACS 3.8 can be copied and distributed freely for any
  7.     non-commercial purposes. MicroEMACS 3.8 can only be incorporated
  8.     into commercial software with the permission of the current author.
  9.  
  10. (    Notice the copyright.....a number of large companies decided to use
  11. MicroEMACS 3.7 and 3.7i as the shell of their products, and several of
  12. the ones I contacted were not even courteos enough to send me their
  13. product for my personal use.  I am not out to make a fortune on this,
  14. but a little common courtesy would be appreciated.)
  15.  
  16. **********************************************************************
  17.  
  18.     It has been quite a while since the last realease and there are
  19. a large number of new features and enhancements to old features.  There
  20. is now a full extension language and there is also support nearly
  21. completed for a number of newer 68000 machines.  The edit history at the
  22. beginning of the MAIN.C file details the changes. 
  23.  
  24.     MicroEMACS 3.8f is availible in a couple of different ways. 
  25. First, it is availible via my bulletin board system..... 
  26.  
  27.     The Programmer's Room
  28.     FIDO 201/2
  29.     (317) 742-5533
  30.     24 hours  300/1200 baud
  31.  
  32.     Also it should be online on the following BBS's:
  33.  
  34.     The Starship Trooper    Fido 201/1    (317) 423-2281    2400
  35.     Duncan Communications            (317) 567-2143    2400
  36.     Avatar            Fido 201/4    (317) 497-1970    1200
  37.  
  38.     There it is arranged as three MSDOS .ARC files, EMACSDOC.ARC
  39. which contains the documentation and command files, EMACSSRC.ARC which
  40. contains the sources and the UNIX Makefile, and EMACSEXE.EXE which
  41. contains the MSDOS executables.  Also all the various executables are
  42. availibile individualy.  (On Duncan Communications, only the sources and
  43. documents are present, as 12 shar files). 
  44.  
  45. EMACSDOC.ARC includes the files:
  46.  
  47.     README        This file
  48.     
  49.     EMACS.RC    Standard startup file
  50.     ME110.RC    HP110 startup file
  51.     ME150.RC    HP150 startup file
  52.     
  53.     
  54.     EMACS.HLP    Online help file
  55.     EMACS.KEY    Cammond wallchart
  56.     EMACS.TUT    Online tutorial
  57.     EMACS.MSS       Emacs Introduction document
  58.     EMACS1.MSS    Emacs Reference guide
  59.     IBMFN.LST    IBM-PC function list
  60.     MAGIC.DOC    Regular partern matching bulletin
  61.     
  62.     AZMAP.CMD    Translate .SYM files to .MAP
  63.     BDATA.CMD    BASIS Data statement builder
  64.     MENU.CMD    Sample Menu system
  65.     MENU1           datafile for menu syste
  66.  
  67. EMACSSRC.ARC includes the files:
  68.  
  69.     ANSI.C        ANSI screen driver
  70.     BASIC.C        basic cursor movement
  71.     BIND.C        key binding commands
  72.     BUFFER.C    buffer manipulation commands
  73.     CRYPT.C        encryption functions
  74.     DG10.C        Data General 10 screen driver
  75.     DISPLAY.C    main display driver
  76.     EBIND.H        binding list
  77.     EDEF.H        global variable declarations
  78.     EFUNC.H        function name list
  79.     EGAPC.C        EGA screen driver
  80.     EPATH.H        default path settings
  81.     ESEARCH.H    search global declarations
  82.     ESTRUCT.H    configuration and structure definitions
  83.     EVAL.C        expresion evaluator
  84.     EVAR.H        EMACS macro variable declarations
  85.     EXEC.C        macro execution functions
  86.     FILE.C        user file functions
  87.     FILEIO.C    low level file I/O driver
  88.     HP110.C        HP110 screen driver
  89.     HP150.C        HP150(A or C) screen driver
  90.     IBMPC.C        IBM-PC CGA and MONOCHROME driver
  91.     INPUT.C        low level user input driver
  92.     ISEARCH.C    incremental search functions
  93.     LINE.C        text line manipulation functions
  94.     LOCK.C        file locking functions
  95.     MAIN.C        argument parsing and command loop
  96.     RANDOM.C    other random user functions
  97.     REGION.C    region cut & paste functions
  98.     SEARCH.C    search and replace functions
  99.     SPAWN.C        OS interface driver
  100.     ST520.C        ATARI ST1040 screen driver [not verified]
  101.     TCAP.C        Termcap screen driver
  102.     TERMIO.C    low level I/O driver
  103.     TIPC.C        TI-PC screen driver
  104.     VMSVT.C        VMS screen driver
  105.     VT52.C        VT52 screen driver
  106.     WINDOW.C    window manipulation functions
  107.     WORD.C        word manipulation functions
  108.  
  109. EMACSEXE.ARC includes the files:
  110.  
  111.     MEIBM.EXE    IBM-PC CGA and MONO version
  112.     MEEGA.EXE    IBM-PC EGA version
  113.     MEANSI.EXE    MSDOS ANSI graphics version
  114.     ME110.EXE    HP110 portable version
  115.     ME150.EX    HP150 version
  116.     ME520.PRG    Atari 520/1040ST version
  117.  
  118.     Also MicroEMACS should be availible from USENET via the
  119. mod.sources (aka comp.unix.sources) notegroup, or its archives.  A
  120. number of sites also make MicroEMACS availible via FTP.  Watch USENET
  121. news for info on these. 
  122.  
  123.     MicroSCRIBE 1.0, which I had hoped to have ready by now, is only
  124. about half written.  MicroEMACS took up more of my time in updates (and
  125. mailings) then I had expected, however having this fairly advanced, and
  126. hopefully fairly stable version, I can get back to getting MicroSCRIBE
  127. written.  Also in the works for a later release is a spell checker
  128. (called MicroSPELL rather predictably) and sometime next year, a
  129. integrated thesaurus program. 
  130.  
  131.     A more customized MicroEMACS for the Macintosh and the Amiga
  132. will probably become availible in the next couple of months.  Support
  133. for the mouse, standard file boxes, pull down menus and different
  134. resolutions will be included.  If you can be of help in getting this
  135. ready, please contact me. 
  136.  
  137.     As before, I will continue to support these programs, and
  138. encourage everyone to spread them around as much as they can. If you
  139. make what you think are changes that are usefull to many, send me the
  140. updates, and as time permits, I will encorporate the ones I understand,
  141. and agree with into the master sources. Being overswamped with mailers,
  142. I have discontinued my mailing offer, but if you have a special problem
  143. getting hold of MicroEMACS, contact me and we can work something out for
  144. you.
  145.  
  146.     USmail:    Daniel Lawrence
  147.         617 New York St
  148.         Lafayette, IN 47901
  149.  
  150.     UUCP:    ihnp4!pur-ee!pur-phy!duncan!lawrence
  151.     or    ihnp4!itivax!duncan!lawrence
  152.     ARPA:    nwd@j.cc.purdue.edu
  153.     FIDO:    The Programmer's Room 201/2
  154.         (317) 742-5533
  155.     ATT:    (317) 742-5153
  156.  
  157.  
  158.  
  159.  
  160.         New Features
  161.         ============
  162.  
  163. ***    Path Searching
  164.  
  165.     If the OS of the operating system MicroEMACS is running under
  166. has environmental variables, MicroEMACS will read in the PATH variable
  167. as a list of directories in which to look for its startup and help
  168. files, in place of the list in the epath.h file.
  169.  
  170. ***    Bindable Prefixes
  171.  
  172.     All the prefix keys can now be rebound. This includes:
  173.  
  174.         meta-prefix        <ESC>
  175.         ctlx-prefix        ^X
  176.         universal-argument    ^U
  177.         quote-character        ^Q
  178.  
  179. ***    HP150 function keys
  180.  
  181.     can now both be labeled and bound.
  182.  
  183. ***    New Help Function
  184.  
  185.     The APROPOS (M-A) function prompts for a string, and then
  186. prepares a list of all named functions that contain the string. This is
  187. usefull for finding all comands that deal with one topic.
  188.  
  189. ***    File Encryption
  190.  
  191.     Text files can now be encrypted (and decrypted <very useful>).
  192. The encryption method (written by Dana Hoggat) results in ALL legal
  193. printing characters, leaving files suitable for mailing and moving
  194. around between systems. The -k <encryption key> command line switch
  195. places the first file into the edit buffer using the named key. CRYPT is
  196. a mode which can be set on any buffer, and set-encryption-key (M-E) sets
  197. the encryption key of the current buffer. If you attempt to write out a
  198. buffer in crypt mode without specifying the key, MicroEMACS will
  199. automatically prompt you for it.
  200.  
  201. ***    Keyboard Macros rewritten
  202.  
  203.     The code for processing keyboard macros now records the responses
  204. to all prompts as well as just the command keystrokes.
  205.  
  206. ***    Restrictive Mode
  207.  
  208.     The -r command line switch prevents EMACS from executing many of
  209. its commands which would allow you to break out of it, or edit files
  210. other then the ones named on the command line.  This is usefull for
  211. products that need to restrict access to the OS from inside the editor
  212. (for example, BBS systems).
  213.  
  214. ***    Word wrap made more flexible
  215.  
  216.     When emacs determined it is time to word wrap (when in wrap
  217. mode) it calls the function which is bound to the illegal keystroke,
  218. M-FNW. This keystroke is normally bound to wrap-word (M-FNW), but can be
  219. rebound by the user so EMACS can do different things at wrap time (like
  220. auto indention in different languages).
  221.  
  222. ***    Fence Matching
  223.  
  224.     The goto-matching-fence (M-^F) command jumps the cursor to the
  225. matching fence, or beeps if there is none.
  226.  
  227. ***    Dynamic Screen Re-sizing
  228.  
  229.     The size that EMACS uses for editing can be changed with the
  230. change-screen-size (M-^S) and change-screen-width (M-^T) commands. These
  231. can then be usefull in integrating EMACS on window based machines.
  232.  
  233. ***    IBMPC drivers combined...
  234.  
  235.     The IBM-PC CGA and MONOCHROME drivers have been combined into
  236. one driver which will look up the graphics adapter type at startup and
  237. adjust accordingly.
  238.  
  239. ***    Atari 520/1040ST Support added
  240.  
  241.     The Atari 520/1040ST is now supported in both monochome and
  242. color modes. Both low and medium resolution can be used with the color
  243. monitor. DENSE mode (40 line) is not ready for the monochrome monitor at
  244. the time of this version. Also shelling out for commands is not ready.
  245.  
  246. ***    EXTENTION LANGUAGE
  247.  
  248.     MicroEMACS is now equipped with a fully functional extention
  249. language in which to write macros.  These macros can be saved, recalled
  250. and bound to keystrokes, thus allowing a high degree of customization. 
  251. What follows is an exerpt from what will become the new MicroEMACS
  252. reference manual. 
  253.  
  254. Chapter x:        MicroEMACS Macros
  255.  
  256.     Macros are programs that are used to customize the editor and to
  257. perform complicated editing tasks.  They may be stored in files or
  258. buffers and may be executed using an appropriate command, or bound to a
  259. particular keystroke.  Portions of the standard start-up file are
  260. impliment via macros, as well as the example menu system.  The
  261. execute-macro-<n> editor commands cause the macros, numbered from 1 to
  262. 40, to be executed.  Macros are stored by executing files that contain
  263. the store-macro command.
  264.  
  265.     There are many different aspects to the macro langage within
  266. MicroEMACS.  Editor commands are the various commands that manipulate
  267. text, buffers, windows, etc, within the editor.  Directives are commands
  268. which control what lines get executed within a macro.  Also there are
  269. various types of variables.  Environmental variables both control and
  270. report on different aspects of the editor.  User variables hold string
  271. values which may be changed and inspected.  Buffer variables allow text
  272. to be placed into variables.  Interactive variable allow the program to
  273. prompt the user for information.  Functions can be used to manipulate
  274. all these variables. 
  275.  
  276. x.00    Variables
  277.  
  278.     Variables in MicroEMACS can be used to return values within
  279. expressions, as repeat counts to editing commands, or as text to be
  280. inserted into buffers and messages.  The value of these variables is set
  281. using the set (^X-A) command.  For example, to set the current fill
  282. column to 64 characters, the following macro line would be used:
  283.  
  284.     set $fillcol 64
  285.  
  286.     or to have the contents of %NAME inserted at the point in the
  287. current buffer, the command to use would be:
  288.  
  289.     insert-string %name
  290.  
  291.  
  292. x.01    Environmental Variables
  293.  
  294.     "What good is a quote if you can't change it?"
  295.  
  296.     These variables are used to change different aspects of the way
  297. the editor works.  Also they will return the current settings if used as
  298. part of an expresion.  All environmental variable names begin with a
  299. dollar sign ($). 
  300.  
  301.     $fillcol    Current fill column
  302.     $pagelen    Number of screen lines used currently
  303.     $curwidth    Number of columns used currently
  304.     $curcol        Current column of point in current buffer
  305.     $curline    Current line of point in current buffer
  306.     $flicker    Flicker Flag
  307.                 set to TRUE if IBM CGA
  308.                 set to FALSE for most others
  309.     $cbufname    Name of the current buffer
  310.     $cfname        File name of the current buffer
  311.     $sres        Current screen resolution
  312.             (CGA or MONO on the IBM-PC driver...
  313.              EGA on the EGA driver
  314.              LOW MEDIUM or HIGH on the Atari ST1040
  315.              NORMAL on all others)
  316.     $debug        Flag to trigger macro debugging (try it...
  317.                 you'll like it!)
  318.     $status        return status of the success of the last command
  319.             (TRUE or FALSE) usually used with !force
  320.     $palette    string used to control the palette register
  321.             settings on graphics versions.  The usually form
  322.             consists of groups of three octal digits
  323.             setting the red, green, and blue levels.
  324.  
  325.     Obviously, many more of these variables will be availible in
  326. future releases of MicroEMACS. (Yes, send a vote for your favorite new
  327. environmental variables today).
  328.  
  329. x.02    User variables
  330.  
  331.     User variables allow you, the user, to store strings and
  332. manipulate them.  These strings can be pieces of text, numbers (in text
  333. form), or the logical values TRUE and FALSE.  These variables can be
  334. combined, tested, inserted into buffers, and otherwise used to control
  335. the way your macros execute. At the moment, up to 100 user variables may
  336. be in use in one editing session.  All users variable names must begin
  337. with a percent sign (%) and may contain any printing characters.  Only
  338. the first 10 characters are significant (ie differences beyond the tenth
  339. character are ignored). Most operators will truncate strings to a length
  340. of 128 characters.
  341.  
  342. x.03    Buffer Variables
  343.  
  344.     Buffer variables are special in that they can only be queried
  345. and cannot be set.  What buffer variables are is a way to take text from
  346. a buffer and place it in a variable. For example, if I have a buffer by
  347. the name of RIGEL2, and it contains the text:
  348.  
  349.     Richmond
  350.     Lafayette
  351.     <*>Bloomington        (where <*> is the current point)
  352.     Indianapolis
  353.     Gary
  354.     =* MicroEMACS 3.8f (WRAP) == rigel2 == File: /data/rigel2.txt =====
  355.  
  356.     and within a command I reference #rigel2, like:
  357.  
  358.     insert-string #rigel2
  359.  
  360.     MicroEMACS would start at the current point in the RIGEL2
  361. buffer and grab all the text up to the end of that line and pass that
  362. back.  Then it would advance the point to the beginning of the next line.
  363. Thus, after our last command executes, the string "Bloomington" gets
  364. inserted into the current buffer, and the buffer RIGEL2 now looks like
  365. this:
  366.  
  367.     Richmond
  368.     Lafayette
  369.     Bloomington
  370.     <*>Indianapolis        (where <*> is the current point)
  371.     Gary
  372.     =* MicroEMACS 3.8f (WRAP) == rigel2 == File: /data/rigel2.txt =====
  373.  
  374.     as you have probably noticed, a buffer variable consists of the
  375. buffer name, preceded by a pound sign (#).
  376.  
  377. x.04    Interactive variables
  378.  
  379.     Interactive variables are actually a method to prompt the user
  380. for a string.  This is done by using an at sign (@) followed either with
  381. a quoted string, or a variable containing a string.  The string is the
  382. placed on the bottom line, and the editor waits for the user to type in
  383. a string.  Then the string typed in by the users is returned as the
  384. value of the interactive variable.  For example:
  385.  
  386.     set %quest "What file? "
  387.     find-file @%quest
  388.  
  389.     will ask the user for a file name, and then attempt to find it.
  390.  
  391.  
  392. x.10    Functions
  393.  
  394.     Functions can be used to manipulate variables in various ways. 
  395. Functions can have one, two, or three arguments.  These arguments will
  396. always be placed after the function on the current command line.  For
  397. example, if we wanted to increase the current fill column by two, using
  398. emacs's set (^X-A) command, we would write:
  399.  
  400.     set $fillcol &add $fillcol 2
  401.          \      \      \      \     \____second operand
  402.            \      \      \      \________first operand
  403.              \      \      \_____________function to execute
  404.                \      \__________________variable to set
  405.                  \_______________________set (^X-A) command
  406.  
  407.     Function names always begin with the ampresand (&) character,
  408. and are only significant to the first three characters after the
  409. ampresand.  Functions will normal expect one of three types of
  410. arguments, and will automatically convert types when needed.
  411.  
  412.     <num>    an ascii string of digits which is interpeted as a
  413.         numeric value.  Any string which does not start with a
  414.         digit or a minus sign (-) will be considered zero.
  415.  
  416.     <str>    An arbitrary string of characters.  At the moment,
  417.         strings are limited to 128 characters in length.
  418.  
  419.     <log>    A logical value consisting of the string "TRUE" or
  420.         "FALSE". Numeric strings will also evaluate to "FALSE"
  421.         if they are equal to zero, and "TRUE" if they are
  422.         non-zero. Arbitrary text strings will have the value of
  423.         "FALSE".
  424.  
  425.     A list of the currently availible functions follows: (Once
  426. again, send in those votes on what kind of functions you would like to
  427. see added!)
  428.  
  429. Numeric Functions:    (returns <num>)
  430.  
  431. &ADD        <num> <num>    Add two numbers
  432. &SUB        <num> <num>    Subtract the second number from the first
  433. &TIMes        <num> <num>    Multiply two numbers
  434. &DIVide        <num> <num>    Divide the first number by the second
  435.                 giving an integer result
  436. &MOD        <num> <num>    Return the reminder of dividing the
  437.                 first number by the second
  438. &NEGate        <neg>        Multiply the arg by -1
  439.  
  440.  
  441. String manipulation functions:    (returns <str>)
  442.  
  443. &CAT        <str> <str>    Concatinate the two strings to form one
  444. &LEFt        <str> <num>    return the <num> leftmost characters
  445.                 from <str>
  446. &RIGht        <str> <num>    return the <num> rightmost characters
  447.                 from <str>
  448. &MID        <str> <num1> <num2>
  449.                 Starting from <num1> position in <str>,
  450.                 return <num2> characters.
  451.  
  452. Logical Testing functions:    (returns <log>)
  453.  
  454. &NOT        <log>        Return the opposite logical value
  455. &EQUal        <num> <num>    If <num> and <num> are numerically
  456.                 equal, return TRUE
  457. &LESs        <num1> <num2>    If <num1> is less than <num2>, return
  458.                 TRUE.
  459. &GREater    <num1> <num2>    If <num1> is greater than, or equal to
  460.                 <num2>, return TRUE.
  461. &SEQual        <str1> <str2>    If the two strings are the same, return
  462.                 TRUE.
  463. &SLEss        <str1> <str2>    If <str1> is less alphabetically than
  464.                 <str2>, return TRUE.
  465. &SGReater    <str1> <str2>    If <str1> is alphabetically greater than
  466.                 or equal to <str2>, return TRUE.
  467.  
  468. Special Functions:
  469.  
  470. &INDirect    <str>        Evaluate <str> as a variable.
  471.  
  472.     This last function deserves more explaination. The &IND function
  473. evaluates its argument, takes the resulting string, and then uses it as
  474. a variable name.  For example, given the following code sequence:
  475.  
  476.     ; set up reference table
  477.  
  478.     set %one    "elephant"
  479.     set %two     "giraffe"
  480.     set %three     "donkey"
  481.  
  482.     set %index "two"
  483.     insert-string &ind %index
  484.  
  485.     the string "giraffe" would have been inserted at the point in
  486. the current buffer.  This indirection can be safely nested up to about
  487. 10 levels.
  488.  
  489. x.20    Directives
  490.  
  491.     Directives are commands which only operate within an executing
  492. macro, ie they do not make sense as a single command. As such, they
  493. cannot be called up singly or bound to keystroke. Used within macros,
  494. they control what lines are executed and in what order.
  495.  
  496.     Directives always start with the exlaimation mark (!) character
  497. and must be the first thing placed on a line. Directives executed singly
  498. (via the execute-command-line command) interactively will be ignored.
  499.  
  500. x.21    !ENDM Directive
  501.  
  502.     This directive is used to terminate a macro being stored. For
  503. example, if a file is being executed contains the text:
  504.  
  505.     ;    Read in a file in view mode, and make the window red
  506.     26    store-macro
  507.         find-file @"File to view: "
  508.         add-mode "view"
  509.         add-mode "red"
  510.     !endm
  511.  
  512.     write-message "[Consult macro has been loaded]"
  513.  
  514.     only the lines between the store-macro command and the !ENDM
  515. directive are stored in macro 26.
  516.  
  517. x.22    !FORCE Directive
  518.  
  519.     When MicroEMACS executes a macro, if any command fails, the
  520. macro is terminated at that point. If a line is preceeded by a !FORCE
  521. directive, execution continues weather the command succeeds or not. For
  522. example:
  523.  
  524.     ;    Merge the top two windows
  525.  
  526.     save-window        ;remember what window we are at
  527.     1 next-window        ;go to the top window
  528.     delete-window        ;merge it with the second window
  529.     !force restore-window    ;This will continue irregardless
  530.     add-mode "red"
  531.  
  532. x.23    !IF, !ELSE, and !ENDIF Directives
  533.  
  534.     This directive allows statements only to be executed if a
  535. condition specified in the directive is met.  Every line following the
  536. !IF directive, until the first !ELSE or !ENDIF directive, is only
  537. executed if the expresion following the !IF directive evaluates to a
  538. TRUE value.  For example, the following macro segment creates the
  539. portion of a text file automatically.  (yes believe me, this will be
  540. easier to understand then that last explaination....)
  541.  
  542.     !if &sequal %curplace "timespace vortex"
  543.         insert-string "First, rematerialize~n"
  544.     !endif
  545.     !if &sequal %planet "earth"    ;If we have landed on earth...
  546.         !if &sequal %time "late 20th century"  ;and we are then
  547.             write-message "Contact U.N.I.T."
  548.         !else
  549.             insert-string "Investigate the situation....~n"
  550.             insert-string "(SAY 'stay here Sara')~n"
  551.         !endif
  552.     !else
  553.         set %conditions @"Atmosphere conditions outside? "
  554.         !if &sequal %conditions "safe"
  555.             insert-string &cat "Go outside......" "~n"
  556.             insert-string "lock the door~n"
  557.         !else
  558.             insert-string "Dematerialize..try somewhen else"
  559.             newline
  560.         !endif
  561.     !endif
  562.  
  563. x.24    !GOTO Directive
  564.  
  565.     Flow can be controlled within a MicroEMACS macro using the !GOTO
  566. directive. It takes as an argument a label. A label consists of a line
  567. starting with an asterick (*) and then an alphanumeric label.  Only
  568. labels in the currently executing macro can be jumped to, and trying to
  569. jump to a non-existing label terminates execution of a macro.  For
  570. example..
  571.  
  572.     ;Create a block of DATA statements for a BASIC program
  573.  
  574.         insert-string "1000 DATA "
  575.         set %linenum 1000
  576.  
  577.     *nxtin
  578.         update-screen        ;make sure we see the changes
  579.         set %data @"Next number: "
  580.         !if &equal %data 0
  581.             !goto finish
  582.         !endif
  583.  
  584.         !if &greater $curcol 60
  585.             2 delete-previous-character
  586.             newline
  587.             set %linenum &add %linenum 10
  588.             insert-string &cat %linenum " DATA "
  589.         !endif
  590.  
  591.         insert-string &cat %data ", "
  592.         !goto nxtin
  593.  
  594.     *finish
  595.  
  596.         2 delete-previous-character
  597.         newline
  598.  
  599. x.25    !RETURN Directive
  600.  
  601.     The !RETURN Directive causes the current macro to exit, either
  602. returning to the caller (if any) or to interactive mode.  For example:
  603.  
  604.     ;    Check the monitor type and set %mtyp
  605.  
  606.     !if &sres "CGA"
  607.         set %mtyp 1
  608.         !return
  609.     !else
  610.         set %mtyp 2
  611.     !endif
  612.  
  613.     insert-string "You are on a MONOCHROME machine!~n"
  614.  
  615. <<<END OF MANUAL EXCERPT>>>
  616.